<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>深拷贝</title>
		
		<script type="text/javascript">
			//深拷贝 --- 深拷贝拷贝多个层次,每一个级别 的数据都会拷贝
			var obj = {
				age:18,
				name:'张三',
				info: {
					adress:'广东省广州市'
				},
				job:[
					{jobname:'程序员'},
					{money:3000}
				]
			}
			
			//定义一个对象装对象
			var o = {};
			//深拷贝 --- 先遍历数据 判断每一个指向属于哪一个数据类型，然后通过递归给新对象赋值
			//注意: 数组的数据的类型判断要在对象之前
			function deepCopy(newObj,oldObj) {
				//遍历旧数组
				for(var k in oldObj) {
					//判断数据的类型
					var item = oldObj[k]; //属性值
					if(item instanceof Array) {
						//如果是数组类型
						newObj[k] = [];
						//使用递归遍历当前的这个数组类型的值,再赋值给当前的新对象的属性
						deepCopy(newObj[k],item);
					} else if(item instanceof Object) {
						//当前对象属性的值是对象类型
						newObj[k] = {};
						//使用递归遍历当前对象属性的值，再赋值给当前新对象属性的值
						deepCopy(newObj[k],item);
					} else {
						//当前的值是简单数据类型
						newObj[k] = item;
					}
				}
				
				return newObj;
			}
			var res = deepCopy(o,obj);
			console.log(res);
			console.log(obj);
			o.info.adress = '广东省高州市'
			console.log(o);//修改了拷贝出来的数据原对象中的对应的属性值也没有影响
		</script>
	</head>
	<body>
	</body>
</html>
